In gdm, we would attempt to become modal during the synchronous initialization,
and this would fail, as X prevents grabs on unmapped windows. Instead,
wait for the stage to be visible before becoming modal.
https://bugzilla.gnome.org/show_bug.cgi?id=683357
},
showDialog: function() {
- if (!this._isModal) {
- Main.pushModal(this.actor);
- this._isModal = true;
- }
+ // Ensure that the stage window is mapped, before taking a grab
+ // otherwise X errors out
+ Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
+ if (!this._isModal) {
+ Main.pushModal(this.actor);
+ this._isModal = true;
+ }
+
+ return false;
+ }));
this.actor.show();
this._isGreeter = Main.sessionMode.isGreeter;